package com.financing.wap.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class TimesUtil {
	
	

	/**
	 * 获得当天0点时间
	 * @return
	 */
	public static Date getTimesmorning() {
	Calendar cal = Calendar.getInstance();
	cal.set(Calendar.HOUR_OF_DAY, 0);
	cal.set(Calendar.SECOND, 0);
	cal.set(Calendar.MINUTE, 0);
	cal.set(Calendar.MILLISECOND, 0);
	return cal.getTime();
	}


	/**
	 *  获得当天24点时间
	 * @return
	 */
	public static Date getTimesnight() {
	Calendar cal = Calendar.getInstance();
	cal.set(Calendar.HOUR_OF_DAY, 24);
	cal.set(Calendar.SECOND, 0);
	cal.set(Calendar.MINUTE, 0);
	cal.set(Calendar.MILLISECOND, 0);
	return  cal.getTime();
	}


	/**
	 *  获得本周一0点时间
	 * @return
	 */
	public static Date getTimesWeekmorning() {
	Calendar cal = Calendar.getInstance();
	cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
	cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
	return  cal.getTime();
	}


	/**
	 *  获得本周日24点时间
	 * @return
	 */
	public  static Date getTimesWeeknight() {
	Calendar cal = Calendar.getInstance();
	cal.setTime(getTimesWeekmorning());
	cal.add(Calendar.DAY_OF_WEEK, 7);
	return cal.getTime();
	}


	/**
	 *  获得本月第一天0点时间
	 * @return
	 */
	public static Date getTimesMonthmorning() {
	Calendar cal = Calendar.getInstance();
	cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
	cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
	return  cal.getTime();
	}


	/**
	 *  获得本月最后一天24点时间
	 * @return
	 */
	public static Date getTimesMonthnight() {
	Calendar cal = Calendar.getInstance();
	cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
	cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
	cal.set(Calendar.HOUR_OF_DAY, 24);
	return cal.getTime();
	}
	
	
	
	/**
	 * 时间加减操作
	 * @throws ParseException 
	 */
	public static Date timsUpd(int num) throws ParseException{
		
		SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
		Date beginDate = new Date();
		Calendar date = Calendar.getInstance();
		date.setTime(beginDate);
		date.set(Calendar.DATE, date.get(Calendar.DATE) + num);
		Date endDate = dft.parse(dft.format(date.getTime()));
		
		return endDate;
	}
	
	/**
	 * 时间加减操作
	 * @throws ParseException 
	 */
	public static Date timsUpd(Date beginDate, int num) throws ParseException{
		
		SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
		Calendar date = Calendar.getInstance();
		date.setTime(beginDate);
		date.set(Calendar.DATE, date.get(Calendar.DATE) + num);
		Date endDate = dft.parse(dft.format(date.getTime()));
		
		return endDate;
	}
	
	/**
	 * 判断日期大小
	 * 
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public static boolean compareDate(String startDate, String endDate) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date start = sdf.parse(startDate);
			Date end = sdf.parse(endDate);
			
			if(start.getTime() > end.getTime()) {
				return true;
			}
			
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return false;
	}
	
	/**
	 * 根据日期获取N天前区间所有日期
	 * 
	 * @param startDate 开始日期
	 * @param daynum 相隔天数
	 * @return
	 * @throws ParseException 
	 */
	public static List<String> getTimesData(Date date, int num) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		
		List<String> list = new ArrayList<String>();
		for(int i=num; i>=0; i--) {
			list.add(sdf.format(timsUpd(date, -i)));
		}
		return list;
	}
	
	public static void main(String[] args) {
		try {
			List<String> list = getTimesData(new Date(), 6);
//			System.out.println(list.toString());

			
			System.out.println(compareDate("2017-04-27", "2013-05-18"));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}
